TESTING PLAYBOOK

ABC Marketing & Communications Module — Testing Playbook

Master contact list management, Constant Contact integration, ME Score workflows, SMS/text messaging, and comprehensive testing strategy for the M&C system

The Business

Marketing & Communications Module Overview

The M&C module eliminates manual contact management workflows by automating contact list creation, deduplication, and synchronization with Constant Contact. It bridges member databases with email marketing systems and SMS campaigns, enabling faster, cleaner contact acquisition for marketing initiatives.

The module supports three major operational areas: Contact List Management & Constant Contact Integration, ME Score Integration, and Text Messaging (SMS).

Core Functional Areas

1. Contact List Management & Constant Contact Integration

Contact lists are created from four data sources: Committees (with year/classification filters), Groups (with year/classification), Events (with year/classification/sub-classification and optional sponsors), and Contact Types (with company type/region/primary/all individuals/individual type options).

  • System automatically deduplicates contacts across all data sources
  • Lists can be saved for future reuse or saved as templates for different variations
  • Lists are synced to Constant Contact with activate/deactivate control to manage CC list limits
  • Browse interface allows management of saved lists with edit, delete, export, and activate/deactivate functions
  • CC integration handles contact sync (Email, First Name, Last Name) and list sync with "sync_" prefix naming

2. ME Score Integration

Member Engagement reports allow QA to select companies directly from scoring results and create contact lists with a single click. ME Score lists are automatically prefixed with "ME-", are non-editable, and display source indicators to show they were generated from engagement data.

  • Creates contact lists from company-level engagement scores
  • Engagement scores are dynamic and point-in-time (not historical)
  • Contact type defaults to Primary Contact if selected type doesn't exist
  • Integration eliminates manual export and import steps

3. Text Messaging (SMS)

Twilio integration enables SMS campaigns triggered alongside email events. SMS is a complement to email, not a replacement—both are sent when triggered. SMS supports static templates with dynamic field substitution, and individuals can opt out via "do not text" checkbox.

  • Plain text only; non-customizable by chapters
  • Opt-in by default; "do not text" checkbox opts out
  • Sent alongside email events (both email and SMS fire together)
  • Only sent if phone number exists AND individual is not opted out
QA Critical: Why This Matters

M&C eliminates multi-step manual workflows: no more exporting from AMS, deduplicating in spreadsheets, uploading to CC, or managing growing CC list limits. It reduces time-to-campaign from days to minutes and eliminates human error in contact acquisition. Cleaner lists mean better email deliverability and SMS compliance.

The Contact List Lifecycle

Every contact list follows this lifecycle in the system:

  1. Create: Use Contact List Builder to select committees, groups, events, and contact types
  2. Generate Results: System deduplicates and displays contacts with Name, Email, Company
  3. Refine: Remove unwanted contacts from results preview
  4. Save: Save as reusable list or template
  5. Activate: Mark list as Active to count toward CC limits
  6. Sync to CC: Cron job syncs contact data and creates CC list with "sync_" prefix
  7. Browse/Manage: Edit, deactivate, delete, or export saved lists
Constant Contact Integration Model

CC integration operates on two levels: contact sync and list sync. Contact sync pushes Email, First Name, Last Name from AMS to CC, excluding individuals with "Do Not Email" checked. List sync creates CC lists with "sync_" prefix containing only Active lists. The system handles orphan foreign keys if a CC list is deleted externally but AMS still references it.

  • Contact Sync: Runs on configurable cron schedule; respects "Do Not Email" flag
  • List Sync: Only Active lists sync; Inactive lists don't count toward CC limits
  • CC Limitations: Chapter accounts have list limits; sync respects these limits
  • Naming Convention: All synced lists prefixed with "sync_" for easy identification
  • Configuration: API Key, API Secret, Test Connection, and Save flow in CC Configuration section
  • Sync Report: Displays last attempted time, status, completed count, and active list counts
QA Critical: CC List Limit Management

Constant Contact limits the number of lists a chapter account can maintain. The M&C module respects this limit by only syncing Active lists. A chapter must deactivate lists to prevent hitting the limit. If a list is deleted from CC externally, AMS may still consider it active—the system must handle this orphan FK gracefully without breaking sync.

How It Works

Contact List Builder Workflow

The Contact List Builder is the entry point for creating contact lists. Users select from four independent data sources, each with distinct filter options:

  • Committees: Filter by year and classification
  • Groups: Filter by year and classification; groups must have at least one individual to appear
  • Events: Filter by year, classification, sub-classification; optional sponsors checkbox
  • Contact Types: Filter by company type, region, primary contact designation, all individuals, individual type

After selection, the system deduplicates across all sources and displays results in a table (Name, Email, Company). Users can remove unwanted contacts, then either save the list, save as template, or proceed to CC sync.

Browse Contact Lists Interface

The Browse Contact Lists page displays a table of all saved lists with columns: List Name, Status (Active/Inactive), Last Synced, Contact Count. Two key actions are available:

  • Edit List: Opens Contact List Builder pre-populated with original criteria, allows regeneration (completely replaces previous contacts)
  • Load Criteria: Creates a NEW list from template without modifying the original

Additional actions: Activate/Deactivate, Delete, Export (CSV/Excel).

Edit List Criteria and Regeneration Behavior

When editing a list, the Contact List Builder pre-populates with the saved selection. Regenerating the list COMPLETELY REPLACES previous contacts. Manual removals are NOT preserved—the system rebuilds from scratch. A warning is displayed when editing lists that are actively syncing to CC.

QA Critical: Edit vs Load

Edit List modifies the EXISTING list and regenerates contacts. Load Criteria creates a NEW list from a template. This distinction is critical for understanding data loss scenarios and backup strategies.

Constant Contact Configuration

M&C requires API credentials to sync with Constant Contact. The CC Configuration section accepts API Key and API Secret, provides a Test Connection button to validate credentials, and displays Connection Status (Connected, Not Connected, Error). Settings are saved and persistent.

CC Sync Process

CC Sync has two components: contact sync and list sync. Contact sync pushes member data (Email, First Name, Last Name) to CC, excluding individuals with "Do Not Email" checked. List sync creates CC lists with "sync_" prefix, containing only Active lists. Both run on configurable cron schedules.

Sync Report shows: last attempted time, status (Success/Failed), contacts synced, lists created, lists updated, and active list counts relative to chapter limit.

ME Score Integration Workflow

From a Company Report Results page, QA checks one or more companies. A "Create Contact List" modal appears. The system auto-prefixes the list name with "ME-", provides a contact type dropdown (defaults to Primary Contact), and displays a source indicator showing the list was generated from ME Score data. Lists are non-editable after creation.

SMS/Text Messaging Configuration and Triggering

SMS requires Twilio API credentials (Account SID, Auth Token). Static SMS templates with dynamic fields (e.g., {{FirstName}}, {{CompanyName}}) are defined once and used across all campaigns. SMS is triggered alongside email events—both are sent simultaneously when conditions are met.

SMS is sent only if the individual has a phone number AND has not opted out via "do not text" checkbox. The system respects the opt-in-by-default model.

Browse Export: Companies and Individuals

Both Browse Companies and Browse Individuals pages support CSV and Excel export. Exports respect current filters and only include displayed columns, not all available data. This allows for flexible, context-aware exports.

Glossary

Core Terminology

  • Contact List: A collection of member/contact records created by filtering and deduplicating from one or more data sources (Committees, Groups, Events, Contact Types). Each list has a name, status, contact count, and sync history.
  • Contact List Builder: The interface for creating contact lists by selecting from four data sources, filtering, deduplicating, and optionally removing unwanted contacts before saving.
  • Data Source: One of four independent sources for contact list creation: Committees, Groups, Events, Contact Types. Each has distinct filter options and selection criteria.
  • Template: A saved contact list criteria that can be reused to create new lists with the same filters without modifying the original list. Accessed via Load Criteria.
  • Browse Contact Lists: The management interface displaying all saved lists with status, last synced, contact count, and action options (Edit, Delete, Activate, Deactivate, Export).
  • Load Criteria: An action that creates a NEW list from an existing template/list, preserving the original criteria without modifying the source list.
  • Constant Contact (CC): Third-party email marketing platform that M&C integrates with for list and contact management. AMS syncs contact and list data to CC on a schedule.
  • CC Sync: The automated process of pushing contact and list data from AMS to Constant Contact. Includes contact sync (Email, First Name, Last Name) and list sync (creation and updates).
  • CC List ID: Unique identifier assigned by Constant Contact to each synced list, used to track and update lists.
  • "sync_" Prefix: Naming convention applied to all lists created via CC Sync, making them easily identifiable as system-generated.
  • Orphan FK: A foreign key reference to a CC list that no longer exists because the list was deleted externally from Constant Contact. AMS must handle this gracefully.
  • Do Not Email: A checkbox on individual contact records that excludes them from CC contact sync. Respected at sync time; existing CC opt-outs are NOT written back to AMS.
  • ME Score (Member Engagement): A company-level engagement metric calculated dynamically from member participation data. Used to identify high-value prospects for campaigns.
  • Member Engagement (ME): System that calculates engagement scores for companies based on participation in events, committees, groups, and other activities. Scores are point-in-time and dynamic.
  • Contact Type Fallback: Automatic fallback to Primary Contact type if a selected contact type doesn't exist for a company during ME Score list creation.
  • Twilio: Third-party SMS/text messaging platform integrated with M&C for SMS campaign delivery.
  • SMS: Short Message Service (text messaging) triggered alongside email campaigns. Plain text only; non-customizable by chapters.
  • "Do Not Text": A checkbox on individual contact records that opts them out of SMS campaigns. Opt-in by default, explicit checkbox opts out.
  • Static SMS Template: Pre-defined SMS message text with placeholders for dynamic fields ({{FirstName}}, {{CompanyName}}, etc.). Applied to all SMS sends.
  • Cron Job: Scheduled automated task that runs CC Sync at configured intervals (e.g., daily, hourly). Handles both contact and list sync.
  • Preference Set: Collection of individual communication preferences including Do Not Email, Do Not Text, and other opt-out flags.

Test Strategy

Core Testing Areas

M&C testing spans six major functional areas, each with critical validation points:

1. Contact List Builder Validation

  • All four data sources (Committees, Groups, Events, Contact Types) independently selectable and filterable
  • Filter combinations work correctly across year, classification, sub-classification, and type fields
  • Groups with zero individuals are excluded from results
  • Results display Name, Email, Company correctly for all source combinations
  • Sponsors checkbox on Events includes/excludes sponsor individuals as expected
  • Contact Type fallbacks work when selected type doesn't exist

2. Deduplication Logic

  • Same individual appearing in multiple committees, groups, or events appears only once in results
  • Deduplication uses Email as primary key (or Name+Company if email missing)
  • Remove contacts function removes individuals from results without affecting source data
  • Save and save-as-template preserve deduplication intent

3. Edit vs Load Behavior

  • Edit List pre-populates builder with original criteria
  • Regenerating completely replaces previous contacts (manual removals lost)
  • Load Criteria creates new list without modifying original
  • Warning displayed when editing active CC-syncing lists
  • History/audit trail shows regeneration events

4. Constant Contact Sync

  • Contact sync: Email, First Name, Last Name pushed to CC correctly
  • Do Not Email exclusion: individuals with flag not synced to CC
  • List sync: creates CC list with "sync_" prefix
  • Only Active lists sync; Inactive lists don't sync
  • Inactive lists don't count toward CC list limit
  • Orphan FK: system handles CC list deletion gracefully
  • Sync Report: accurate last attempted, status, counts, and limits
  • Cron job runs at configured interval without missing syncs

5. CC Limitations and List Management

  • Chapter account respects CC list limit (e.g., 50 lists max)
  • System prevents creating/syncing lists beyond limit
  • Deactivating lists reduces active list count toward limit
  • Error handling when limit reached (graceful failure)
  • Sync report shows current active list count vs limit

6. ME Score Integration

  • Company Report Results page allows multi-select
  • "Create Contact List" modal appears with selections
  • List name auto-prefixed with "ME-"
  • Contact type dropdown defaults to Primary Contact
  • Source indicator shows "From ME Score Report"
  • ME lists non-editable (no Edit List option available)
  • Engagement scores are company-level (not individual-level)
  • Scores are dynamic and point-in-time (not historical snapshots)

7. SMS/Text Messaging

  • Twilio account credentials configured correctly
  • Static SMS templates with dynamic fields ({{FirstName}}, etc.) work
  • SMS triggered alongside email (both sent together)
  • SMS opt-in by default; "do not text" checkbox opts out
  • SMS only sent if phone number exists AND not opted out
  • Plain text only; no formatting or HTML in SMS
  • Non-customizable by individual chapters

8. Browse Export

  • Companies export respects current filters
  • Individuals export respects current filters
  • CSV and Excel formats both available
  • Only displayed columns exported (not all fields)
  • File naming and formatting correct
QA Strategy: Deduplication Testing

Deduplication is the heart of M&C value. Test with 10+ overlapping scenarios: 1 person in 3 committees + 2 groups + 1 event; 5 people in same committee; duplicates with variant names (John vs Jon). Verify dedup works consistently and predictably.

Business Rules & Gotchas

The M&C module has 22 critical business rules that govern behavior. Click each to expand:

1. Contact list management location and permissions

Contact List Management is accessed at Contacts > Contact Lists in the AMS navigation. Level 2+ membership required.

2. Four data sources for list creation

Contact lists are created from exactly four independent data sources: Committees, Groups, Events, Contact Types. No other sources available.

3. Groups must have at least one individual

Empty groups are excluded from Contact List Builder results. Only groups with at least one individual member appear in selections.

4. Automatic deduplication across all sources

The system automatically removes duplicates when the same individual appears across multiple data sources (e.g., in 2 committees and 1 event). Deduplication is transparent and happens during results generation.

5. Edit List vs Load Criteria distinction

Edit List modifies the existing list in place. Load Criteria creates a NEW list from the template. This is a critical distinction for data loss prevention.

6. Regenerating list completely replaces contacts

When a list is regenerated via Edit List, the ENTIRE contact roster is replaced with fresh results from current criteria. Previous contacts are discarded.

7. Manual removals not preserved on regeneration

If you removed 10 contacts from a list before saving, then regenerate the list, those 10 removed contacts reappear. Manual removals are not persistent across regenerations.

8. Warning for active CC-syncing lists

When editing a list that is actively syncing to Constant Contact, the system displays a warning that regeneration will push new contacts to CC.

9. Deleting list prevents syncs but not CC deletion

Deleting a list in AMS stops future syncs to that CC list. However, the CC list itself is NOT deleted—it remains in CC and must be cleaned up manually.

10. CC lists prefixed with "sync_"

All lists created via CC Sync are automatically prefixed with "sync_" to distinguish them from manual lists created in CC. E.g., "sync_Gold Members".

11. Only Active lists sync to CC

Inactive lists do not sync to CC and do not count toward the chapter's CC list limit. Deactivating a list stops future syncs and frees up a list slot.

12. Orphan FK handling for deleted CC lists

If a CC list is deleted externally but AMS still has an active reference to it, the system gracefully handles the orphan FK—it attempts sync, fails, reports error, but does not crash.

13. "Do Not Email" exclusion at sync time

Individuals with "Do Not Email" checked are excluded from CC contact sync. AMS enforces this. CC opt-outs are NOT written back to AMS.

14. ME Score lists auto-prefixed "ME-"

Contact lists created from ME Score reports are automatically prefixed with "ME-" (e.g., "ME-Q1 High Engagement"). Prefix is non-editable.

15. ME engagement scores are company-level

Engagement scores are calculated at the company level, not for individual people. A company's score reflects aggregate participation.

16. ME scores are dynamic and point-in-time

ME scores are calculated in real-time from current data, not stored snapshots. A list created today from scores may differ from the same list created tomorrow if participation changed.

17. Contact Type Fallback to Primary

When creating an ME list and the selected contact type doesn't exist for a company, the system falls back to Primary Contact. Default fallback is transparent.

18. SMS plain text only

SMS templates support plain text only. No HTML, no formatting, no emojis. Static templates with dynamic field substitution only.

19. SMS opt-in by default

Individuals are opted in to SMS by default. They must explicitly check "Do Not Text" to opt out. Opt-out is at individual level.

20. SMS triggered alongside email events

SMS is not a replacement for email. When an email campaign is triggered, SMS is sent simultaneously to eligible individuals (with phone number, not opted out).

21. SMS requires phone number and opt-in

SMS is only sent if both conditions are met: (1) individual has phone number on file, and (2) individual has not opted out ("Do Not Text" unchecked).

22. CC Sync cron job runs on schedule

CC Sync runs automatically on a configurable cron schedule (e.g., daily, hourly). The schedule is defined in environment config and monitored. Failed runs are logged and reported in Sync Report.

23. Browse export respects filters and columns

When exporting from Browse Companies or Browse Individuals, the export includes only displayed columns and respects any active filters. Full table not exported.

Scenario Thinking

Real-world QA scenarios test edge cases and integration points. Work through these scenarios to validate system behavior:

Scenario 1: Chapter Hits CC List Limit

Setup: Chapter account at 49/50 CC list limit. User creates a new contact list and tries to activate/sync.

Questions: Does system prevent sync? What error is shown? Can user deactivate an existing list to free up a slot and then sync the new one?

Expected Behavior: System should prevent sync/activation if limit would be exceeded. Clear error message. Deactivating one list should free a slot immediately.

Scenario 2: CC List Deleted Externally

Setup: A list is synced to CC successfully. Then, the list is deleted directly in Constant Contact (not via AMS). AMS still has active reference to deleted CC list.

Questions: What happens on next sync? Does system crash? Does it gracefully handle orphan FK? Can user re-sync or must they delete in AMS first?

Expected Behavior: Sync fails gracefully. Error logged. Sync Report shows "Failed" status. User can deactivate/delete in AMS to resolve.

Scenario 3: "Do Not Email" Flag Set After CC Sync

Setup: Individual is in an active CC-synced list. Their contact record is updated to check "Do Not Email". Next sync runs.

Questions: Is individual removed from CC sync? Is existing CC record deleted? Is individual still in AMS list but marked as excluded?

Expected Behavior: Individual not included in next contact sync. If list is regenerated, they don't appear. Existing CC record unaffected (AMS doesn't delete from CC).

Scenario 4: ME Score List Regenerated (Shouldn't Happen)

Setup: ME Score list created (ME-Q1 Report). User tries to click Edit List.

Questions: Is Edit option hidden? Is there a warning? Can user regenerate an ME list?

Expected Behavior: ME lists should not be editable. Edit option is disabled/hidden. Attempting to edit shows message "ME Score lists are not editable."

Scenario 5: SMS Triggered Without Phone Number

Setup: Email campaign triggers to a list of 100 individuals. 20 individuals have no phone number on file. SMS is triggered alongside email.

Questions: Do the 20 without phones receive email? Do they not receive SMS? Is there an error or silent skip?

Expected Behavior: All 100 receive email. Only 80 with phone numbers receive SMS. No error. SMS skipped silently for those without numbers.

Scenario 6: Deduplication Across 5 Data Sources

Setup: John Smith (john@acme.com) is member of: Board Committee, 2 Other Committees, 3 Groups, 1 Event, 1 Contact Type.

Questions: Does John appear once in results? Does order matter? How is email dedup key confirmed?

Expected Behavior: John appears exactly once in results. Dedup is by email (primary key). Name+Company used if email missing. Results are consistent regardless of selection order.

Scenario 7: Load Criteria from Deleted List

Setup: List A is saved as template. User saves List B using "Load Criteria" from List A. Then List A is deleted.

Questions: Does List B still exist and function? Can user still load criteria from List B? Are templates versioned?

Expected Behavior: List B exists independently. Load Criteria copies criteria at creation time, not linked to original. Deleting List A doesn't affect List B.

Regression Checklists

Regression Testing: Contact List Builder

Regression Testing: Deduplication

Regression Testing: Browse Contact Lists

Regression Testing: Edit List and Regeneration

Regression Testing: CC Configuration and Sync

Regression Testing: ME Score Integration

Regression Testing: SMS/Text Messaging

Regression Testing: Browse Export

Environment & Data Setup

Pre-Test Environment Setup Requirements

Before QA testing begins, the following data must be loaded into the test environment:

Committees and Groups

  • Create 5+ committees with year and classification filters. Assign 10+ individuals to each.
  • Create 3+ groups with year and classification filters. Ensure at least one group has zero members (for exclusion testing).
  • Ensure some individuals are in multiple committees and groups (for deduplication testing).
  • Include both primary contacts and secondary contacts from companies.

Events

  • Create 10+ events with year, classification, and sub-classification. Assign attendees and sponsors.
  • Create events with varying sponsor counts (0, 1, 5+) to test sponsors checkbox.
  • Ensure some individuals appear in multiple events.

Individuals and Contacts

  • Create 100+ individuals with email addresses. Ensure 10% have no email (for testing email-required validations).
  • Create 20+ individuals with no phone number (for SMS testing).
  • Create 15+ individuals with "Do Not Email" checked.
  • Create 10+ individuals with "Do Not Text" checked.
  • Create 5+ individuals with both "Do Not Email" and "Do Not Text" checked.
  • Ensure individuals belong to multiple companies (for deduplication testing).

Constant Contact Test Account

  • Create or use sandbox Constant Contact account for testing.
  • Configure API Key and API Secret in test environment.
  • Set chapter account list limit to 50 (or configurable test limit).
  • Verify Test Connection button works with credentials.
  • Pre-populate CC account with 40+ existing lists (to test limit scenarios).
  • Manually delete one list in CC (to test orphan FK handling).

Twilio Test Account

  • Create or use Twilio sandbox account for testing.
  • Configure Account SID and Auth Token in test environment.
  • Verify Twilio Test Connection button works with credentials.
  • Create static SMS templates with dynamic fields ({{FirstName}}, {{CompanyName}}).
  • Configure SMS to trigger alongside email events.

ME Score Report Data

  • Ensure Member Engagement report has 20+ companies with calculated engagement scores.
  • Scores should reflect varying participation levels (high, medium, low).
  • Verify scores are dynamic and update when underlying participation data changes.
  • Create ME Score lists from report and verify non-editability.

Contact Type Data

  • Create 10+ contact types (e.g., CEO, Marketing Manager, Board Member, etc.).
  • Assign contact type filters: company type, region, primary/secondary, all individuals.
  • Ensure some companies have no individuals with selected contact type (for fallback testing).
  • Ensure some contact types are sparse (only 1-2 companies) for edge case testing.

Database and Cron Configuration

  • Configure CC Sync cron job to run every 5 minutes in test environment (for easier testing).
  • Verify cron logs are accessible and errors are reported.
  • Ensure test database is reset between major test cycles.
  • Backup production CC account before running integration tests.
QA Setup Best Practice

Use a dedicated Constant Contact sandbox account and Twilio test account. Never test against production CC/Twilio. Schedule cron jobs frequently (every 5 minutes) in test environment for faster test cycles. Keep test data stable across test runs by resetting non-critical data between sprints.

Help Improve This Playbook

Found a gap in test coverage? Discovered a new edge case? Let us know how M&C testing can be more thorough.